

namespace gen {
 
    template <typename S>
    template <typename InfoT>
	void
	first<S>::generate(InfoT & info) const
    {
		if (info.current() == info.domain().firstPositive()) 
		{
			this->subject().generate(info);
		}
    }
    
    ///////////////////////////////////////////////////////////////////////////
    //
    //  first class implementation
    //
    ///////////////////////////////////////////////////////////////////////////
    template <typename S>
    inline first<S>
    operator+(generator<S> const& a)
    {
        return first<S>(a.derived());
    }

}
